import Vue from 'vue'
import Router from 'vue-router'
import Layout from '@/Layout/index.vue'
import store from '@/store'
import { formatRouter } from '@/utils/routerTree.js'

Vue.use(Router)

const routes = [
    {
        path : '/login',
        name : 'login',
        component : () => import('@/view/Login/Login.vue')
    },
    {
        path : '/',
        component : Layout,
        redirect: '/dashboard', // 重定向到首页
        meta : {
            title : '首页'
        },
        // 你所看到的children里面的每个，都是任意角色都可以看见的
        children:[
            {
                path : '/dashboard',
                name : 'dashboard',
                component : () => import('@/view/Dashboard/index.vue')
            },
            {
                path: 'chart',
                meta : {
                    title : '图表'
                },
                component: () => import('@/view/Chart/Chart')
            },
            {
                path: 'shezhi',
                meta : {
                    title : '设置'
                },
                component: () => import('@/view/Shezhi/Shezhi')
            }
        ]
    },
    {
        path : '*',
        name : 'Not_found',
        component :()=> import('@/components/Not_found/Not_found.vue')
    }
]

// 创建路由实例
const router = new Router({
    routes
})

activeRoutes()
// 动态路由加工厂、拼凑厂
export function activeRoutes(){
        // 获得store中的数据
        const res =  store.state
        // 把数据中的权限赋值
        const newRoutes =  formatRouter(res.userPower)
        // 先获得当前route里的所有项，为了方便下面动态添加( 要一起、整体的将数组加进去才可以 )
        const currentRoute = router.options.routes
        // 遍历赋值后的权限
        newRoutes.forEach(item => {
            // 如果他有childen ，遍历children，然后加入到currentRoute
            if(item.children){
                item.children.forEach(value => {
                    currentRoute[1].children.push(value)
                })
            // 没有children直接加入
            }else{
                currentRoute[1].children.push(item) 
            }
        })
        // 动态添加路由
        router.addRoutes(currentRoute)
}

// 路由守卫
router.beforeEach((...args)=>{
    // 如果他去的是登录页，可以
    if(args[0].path === '/login'){
        args[2]()
    }else{
        // 不是登录页，判断token存在不，不存在强制去登录页
        const token = sessionStorage.getItem('token')
        if(!token){
            // token不存在
            args[2]('/login')
        }else{
            // activeRoutes()
            args[2]()
        }
    }
  })

export default router